const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

/*
 * 格式化时间
 * time:传入的时间,
 * cFormat: 生成的格式{y}-{m}-{d} {h}:{i}:{s}
 */
export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (('' + time).length === 10) time = parseInt(time) * 1000
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') {
      return ['日', '一', '二', '三', '四', '五', '六'][value]
    }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return time_str
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}


// 判断是否授权
function isAuthorize(that, cb) {
  const service = require('./service.js');
  wx.showLoading({
    title: '加载中',
    mask: true
  })
  wx.getSetting({
    success: res => {
      console.log(res)
      if (res.authSetting['scope.userInfo']) {
        // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
        wx.getUserInfo({
          success: res => {
            console.log('======== isAuthorize ========');
            console.log(res.userInfo);
            console.log('=============================');

            // 无需每次都去获取新token
            let token = wx.getStorageSync('token');
            if (token) {
              that.globalData.token = token;
              that.globalData.userInfo = wx.getStorageSync('userInfo')
              cb && cb(that);
              return;
            }
            wx.login({
              success: function(e) {
                console.log(e)
                var data = {
                  code: e.code,
                  nickname: res.userInfo.nickName,
                  avatar: res.userInfo.avatarUrl,
                  sex: res.userInfo.gender
                };
                service.getConnect(service.api.login, data).then(function(res) {
                  wx.hideLoading();
                  console.log(res);
                  wx.setStorageSync("token", res.data.token);
                  that.globalData.token = res.data.token;
                  if (!res.data.isBindMobile) {
                    wx.redirectTo({
                      url: '/pages/bind/bind',
                    })
                  } else {
                    that.globalData.userInfo = res.data.userData;
                    wx.setStorageSync("userInfo", res.data.userData);
                    cb && cb(that);
                  }
                })
              }
            })

            // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
            // 所以此处加入 callback 以防止这种情况
            if (that.userInfoReadyCallback) {
              that.userInfoReadyCallback(res)
            }
          }
        })
      } else {
        wx.hideLoading();
        // console.log('======== isAuthorize ========');
        // console.log('scope.userInfo: false')
        // console.log('=============================');
        // wx.navigateTo({
        //   url: '/pages/authorization/authorization',
        // })
      }
    }
  })
}

// 小程序是否有更新
function updateWxApp() {
  // 获取小程序更新机制兼容
  if (wx.canIUse('getUpdateManager')) {
    const updateManager = wx.getUpdateManager();
    updateManager.onCheckForUpdate(function(res) {
      console.log('======== updateWxApp ========');
      console.log('hasUpdate:' + res.hasUpdate);
      console.log('=============================');
      // 请求完新版本信息的回调
      if (res.hasUpdate) {
        updateManager.onUpdateReady(function() {
          wx.showModal({
            title: '更新提示',
            content: '新版本已经准备好，是否重启应用？',
            success: function(res) {
              if (res.confirm) {
                // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                wx.clearStorageSync();
                updateManager.applyUpdate();
              } else {
                getApp().showConfirm('提示', '新版本将会在下次重启微信时更新', false)
              }
            }
          })
        })
        updateManager.onUpdateFailed(function() {
          // 新的版本下载失败
          wx.showModal({
            title: '已经有新版本了哟~',
            content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
          })
        })
      }
    })
  } else {
    // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
    wx.showModal({
      title: '提示',
      content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
    })
  }
}

/**
 * 初始化小程序相关设置
 */
function initDebugSetting() {
  const service = require('./service.js');
  service.getConnect(service.api.getWxAppDebugConfig).then(function (res) {
    // 设置小程序是否打开调试
    getApp().globalData.enableDebug = res['data']['enableDebug'];
    if (wx.getStorageSync('enableDebug') !== res['data']['enableDebug']) {
      wx.setStorageSync('version', res['data']['version']);
      wx.setEnableDebug({
        enableDebug: res['data']['enableDebug']
      })
    }
    // 设置版本号,当版本号不是最新时,清除缓存
    getApp().globalData.version = res['data']['version'];
    if (wx.getStorageSync('version') !== res['data']['version']) {
      wx.clearStorageSync();
      wx.setStorageSync('version', res['data']['version']);
    }
    wx.hideLoading();
  })
  // 云函数-获取设置信息
  // const wxCloud = require('../wxCloud/index.js');
  // wxCloud.Cloud.request({
  //   action: 'getDebugSettingDetails',
  // }).then(res => {
  //   console.log('========云函数请求结果========');
  //   console.log(res);
  //   // 设置小程序是否打开调试
  //   getApp().globalData.enableDebug = res['data']['list']['enableDebug'];
  //   if (wx.getStorageSync('enableDebug') !== res['data']['list']['enableDebug']) {
  //     wx.setStorageSync('version', res['data']['list']['version']);
  //     wx.setEnableDebug({
  //       enableDebug: res['data']['list']['enableDebug']
  //     })
  //   }
  //   // 设置版本号,当版本号不是最新时,清除缓存
  //   getApp().globalData.version = res['data']['list']['version'];
  //   if (wx.getStorageSync('version') !== res['data']['list']['version']) {
  //     wx.clearStorageSync();
  //     wx.setStorageSync('version', res['data']['list']['version']);
  //   }
  //   wx.hideLoading();
  // })
}

// 初始化小程序样式
function initWxappStyle(app, that, cb) {
  const service = require('./service.js');
  service.getConnect(service.api.getWxAppConfig).then(function (res) {
    setTimeout(function () {
      app.globalData['wxappStyle'] = res.data;
      wx.setStorageSync('wxappStyle', res.data);
      // 设置风格
      let wxappTitle = res.data['wxappTitle'];
      let mainColor = res.data['mainColor'];
      // 设置顶部导航栏标题
      wx.setNavigationBarTitle({
        title: wxappTitle,
      })
      // 设置顶部导航栏样式
      wx.setNavigationBarColor({
        frontColor: '#ffffff', // 字体颜色
        backgroundColor: mainColor, // 背景色
      });
      // 设置上拉下拉背景色
      wx.setBackgroundColor({
        backgroundColorTop: mainColor, // 顶部窗口的背景色为白色
        backgroundColorBottom: '#ffffff', // 底部窗口的背景色为白色
      });

      // 初始化小程序设置
      wx.hideLoading();
      app.utils.initDebugSetting();

      // 设置tarbar
      app.utils.changeTarbarIcon(that);
      cb && cb();
    }, 100)
  })
  // const wxCloud = require('../wxCloud/index.js');
  // // 云函数-获取设置信息
  // wxCloud.Cloud.request({
  //   action: 'getWxappStyle',
  // }, app).then(res => {
  //   setTimeout(function() {
  //     console.log('========云函数请求结果========');
  //     console.log(res);
  //     app.globalData['wxappStyle'] = res.data['list'];
  //     wx.setStorageSync('wxappStyle', res.data['list']);
  //     // 设置风格
  //     let wxappTitle = res.data['list']['wxappTitle'];
  //     let mainColor = res.data['list']['mainColor'];
  //     // 设置顶部导航栏标题
  //     wx.setNavigationBarTitle({
  //       title: wxappTitle,
  //     })
  //     // 设置顶部导航栏样式
  //     wx.setNavigationBarColor({
  //       frontColor: '#ffffff', // 字体颜色
  //       backgroundColor: mainColor, // 背景色
  //     });
  //     // 设置上拉下拉背景色
  //     wx.setBackgroundColor({
  //       backgroundColorTop: mainColor, // 顶部窗口的背景色为白色
  //       backgroundColorBottom: '#ffffff', // 底部窗口的背景色为白色
  //     });

  //     // 初始化小程序设置
  //     wx.hideLoading();
  //     app.utils.initDebugSetting();

  //     // 设置tarbar
  //     app.utils.changeTarbarIcon(that);
  //     cb && cb();
  //   }, 100)
  // })
}

// tarbar图片修改
function changeTarbarIcon(that, cb) {
  const app = getApp();
  let config = require('../config.js').Config;
  const base64 = require('./base64.js');

  let mainColor = (app.globalData.wxappStyle && app.globalData.wxappStyle.mainColor) || '#19C5F4';
  console.log(mainColor)

  let tarbarList = config['tarbarList'];

  for (var i = 0; i < tarbarList.length; i++) {
    let temp = wx.getFileSystemManager().readFileSync(tarbarList[i].selectedIconSvg, 'binary');
    temp = temp.replace(/fill="#[a-zA-Z0-9]{0,6}"/g, 'fill="' + mainColor + '"');
    tarbarList[i].selectedIconPath = 'data:image/svg+xml;base64,' + base64.baseEncode(temp);
  }

  if (that && typeof that.getTabBar === 'function' &&
    that.getTabBar()) {
    that.getTabBar().setData({
      selectedColor: mainColor,
      list: tarbarList
    })
  }
  app.globalData.config.tarbarList = tarbarList;
  app.globalData.config.selectedColor = mainColor;

  // 设置首页热门路线图标
  let tempIcon = wx.getFileSystemManager().readFileSync('/images/ticket.svg', 'binary');
  tempIcon = tempIcon.replace(/stroke="#[a-zA-Z0-9]{0,6}"/g, 'stroke="' + mainColor + '"');
  tempIcon = tempIcon.replace(/fill="#[a-zA-Z0-9]{0,6}"/g, 'fill="' + mainColor + '"');
  app.globalData.config.ticketIcon = 'data:image/svg+xml;base64,' + base64.baseEncode(tempIcon);
  cb && cb();
}

/**
 * 格式化腾讯api获取的省市区列表
 * https://apis.map.qq.com/ws/district/v1/list?key=HL6BZ-D24K4-BAXU3-DDKRU-WKF5Z-XCFJ5
 */
function filterLocationList(list) {
  // 格式化后的省市区列表
  let provinceList = [];
  // 循环每个一级列表(省份)
  for (let i = 0; i < list[0].length; i++) {
    // 操作的当前省份
    let provinceTemp = list[0][i];
    // 一级列表对应的二级列表(省份对应的市级列表)
    let cityList = list[1].slice(provinceTemp['cidx'][0], provinceTemp['cidx'][1]);
    // 循环每个二级列表(市级或区)
    for (let j = 0; j < cityList.length; j++) {
      // 操作的当前二级项(市或区)
      let cityTemp = cityList[j];
      // 二级列表对应的三级列表(市级对应的区列表)
      let areaList = [];
      // 是否存在三级列表
      if (cityTemp['cidx']) {
        // 区列表
        areaList = list[2].slice(cityTemp['cidx'][0], cityTemp['cidx'][1]);
        cityTemp['children'] = areaList;
      }
      cityTemp['children'] = areaList
    }
    provinceTemp['children'] = cityList;
    provinceList.push(provinceTemp);
  }
  console.log(provinceList)
}

function createAll(args) {
  return Promise.all(args);
}

module.exports = {
  formatTime: formatTime,
  parseTime: parseTime,
  createAll: createAll,
  isAuthorize: isAuthorize,
  updateWxApp: updateWxApp,
  initWxappStyle: initWxappStyle,
  initDebugSetting: initDebugSetting,
  changeTarbarIcon: changeTarbarIcon
}